/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Manejadores;

import Logica.Accion;
import Persistencia.ADOAccion;
import UI.IAcciones;
import UI.ICargaAccion;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Vector;
import Persistencia.Singleton_Sesion;
import javax.swing.table.DefaultTableModel;
import Logica.Usuario;
import Persistencia.ADOProyecto;
import Reporte.ReporteParametrizado;

/**
 *
 * @author marco esta clase es la encargada de lidiar con la ventana donde se
 * meustran las acciones
 */
public class ManejadorAcciones {

    private ADOAccion adoAcci;
    private ReporteParametrizado report;
    private ADOProyecto adoProy;
    //private String rutaReporte = System.getProperty("user.dir") + "/src/Reporte/reporteAccionesAbiertas.jasper";
    private String rutaReporte =  "lib\\reporteAccionesAbiertas.jasper";

    public ManejadorAcciones() {
        adoAcci = new ADOAccion();

        adoProy = new ADOProyecto();
    }
    Singleton_Sesion sesion;

    /*
     * este metodo devuelve le modelo para que la interfaz cargue la tabla
     */
    public DefaultTableModel cargarTabla(int[] orden, int estado, int usu, String proy) {
        DefaultTableModel modeloResultado = new javax.swing.table.DefaultTableModel(
                new Object[][]{},
                new String[]{
                    "ID", "Nombre", "Descripción", "Usuario", "Vencimiento", "Estado", "Reunión"
                }) {

            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false; //Con esto conseguimos que la tabla no se pueda editar
            }
        };

        Usuario user = new Usuario();
        LinkedList acciones = new LinkedList();
        if (usu == 1) {

            user = sesion.getInstancia().getUsuarioLogueado();
            //provisorio
            // user.setNombreUsuario("admin");

            acciones = adoAcci.traerAcciones(orden, estado, user.getNombreUsuario(), proy);
        } else {
            acciones = adoAcci.traerAcciones(orden, estado, "todos", proy);
        }

        Iterator iter = acciones.iterator();



        while (iter.hasNext()) {
            Accion accionActual = (Accion) iter.next();
            String estadoTexto = "";
            switch (accionActual.getEstado()) {
                case (1):
                    estadoTexto = "Abierta";
                    break;
                case (2):
                    estadoTexto = "Vencida";
                    break;
                case (0):
                    estadoTexto = "Cerrada";
                    break;
            }

            String[] o = {"" + accionActual.getId(), "" + accionActual.getNombre(), "" + accionActual.getDescripcion(), "" + accionActual.getUsuario().getNombreUsuario(), "" + accionActual.getFechaVencimientoStringInvertida(), "" + estadoTexto, "" + accionActual.getReunion()};
            modeloResultado.addRow(o);

        }
        return modeloResultado;
    }

    public DefaultTableModel cargarTablaConTodasLasAccionesParaExportarAExcel() {
        DefaultTableModel modeloResultado = new javax.swing.table.DefaultTableModel(
                new Object[][]{},
                new String[]{
                    "ID", "Nombre", "Descripción", "Usuario", "Vencimiento", "Estado", "Reunión", "Proyecto"
                }) {
        };

        LinkedList acciones = adoAcci.traerTodasLasAcciones();

        Iterator iter = acciones.iterator();



        while (iter.hasNext()) {
            Accion accionActual = (Accion) iter.next();
            String estadoTexto = "";
            switch (accionActual.getEstado()) {
                case (1):
                    estadoTexto = "Abierta";
                    break;
                case (2):
                    estadoTexto = "Vencida";
                    break;
                case (0):
                    estadoTexto = "Cerrada";
                    break;
            }

            String[] o = {"" + accionActual.getId(), "" + accionActual.getNombre(), "" + accionActual.getDescripcion(), "" + accionActual.getUsuario().getNombreUsuario(), "" + accionActual.getFechaVencimientoStringInvertida(), "" + estadoTexto, "" + accionActual.getReunion(), "" + accionActual.getProyecto()};
            modeloResultado.addRow(o);

        }
        return modeloResultado;
    }

    public void cargarAcciones(int proyectoSeleccionado) {
        ICargaAccion ica = new ICargaAccion(proyectoSeleccionado);
        ica.setVisible(true);
        ica.toFront();
    }

    //Método encargado de instanciar la clase reporte y solicitar la creación del mismo
    public void traerReporte(String proyecto) {
        report = new ReporteParametrizado();
        report.showReport(adoAcci.getConexion(), proyecto, rutaReporte);
    }

    public Iterator CargarProyectos(String usuario) {
        Iterator iter = adoProy.traerSoloNombresProyectosParaUsuarioLogueado(usuario).iterator();
        return iter;

    }
    
}
